iT邦幫忙

2024 iThome 鐵人賽

DAY 0
0
自我挑戰組

30 天homelab實做練習系列 第 8

Day-08-磁碟效能測試工具初探(二) - fio

  • 分享至 

  • xImage
  •  

前言

參考文件都看了,接著試用其它效能測試工具。 (沒先多規劃 Lab 題材的缺點)

fio

  • 安裝套件
apt-get install fio

先照抄一串試一下練習機的兩顆 SSD (這寫 --filename 超毛的)

~# fio --filename=/dev/nvme0n1 --direct=1 --rw=randrw --ioengine=libaio --bs=4k --rwmixread=100 --iodepth=16 --numjobs=16 --runtime=60 --group_reporting --name=4ktest
4ktest: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
...
fio-3.33
Starting 16 processes
Jobs: 16 (f=16): [r(16)][100.0%][r=1574MiB/s][r=403k IOPS][eta 00m:00s]
4ktest: (groupid=0, jobs=16): err= 0: pid=31186: Sun Sep 22 19:20:30 2024
  read: IOPS=403k, BW=1574MiB/s (1650MB/s)(92.2GiB/60002msec)
  
~中略~

Run status group 0 (all jobs):
   READ: bw=1574MiB/s (1650MB/s), 1574MiB/s-1574MiB/s (1650MB/s-1650MB/s), io=92.2GiB (99.0GB), run=60002-60002msec

Disk stats (read/write):
  nvme0n1: ios=24094598/104, merge=0/0, ticks=14991772/105436, in_queue=15097210, util=99.83%
~# fio --filename=/dev/sda --direct=1 --rw=randrw --ioengine=libaio --bs=4k --rwmixread=100 --iodepth=16 --numjobs=16 --runtime=60 --group_reporting --name=4ktest


4ktest: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=16
...
fio-3.33
Starting 16 processes
Jobs: 16 (f=16): [r(16)][100.0%][r=381MiB/s][r=97.5k IOPS][eta 00m:00s]
4ktest: (groupid=0, jobs=16): err= 0: pid=30268: Sun Sep 22 19:15:29 2024
  read: IOPS=97.3k, BW=380MiB/s (398MB/s)(22.3GiB/60002msec)

~中略~

Run status group 0 (all jobs):
   READ: bw=380MiB/s (398MB/s), 380MiB/s-380MiB/s (398MB/s-398MB/s), io=22.3GiB (23.9GB), run=60002-60002msec

Disk stats (read/write):
  sda: ios=5814582/642, merge=2/13, ticks=3733094/566, in_queue=3733670, util=99.87%

找其它範例及文件來練

隨機讀

fio -name=randread -direct=1 -iodepth=64 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdb

隨機寫

fio -name=randwrite -direct=1 -iodepth=64 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdb

循序讀

fio -name=read -direct=1 -iodepth=64 -rw=read -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdb

循序寫

fio -name=write -direct=1 -iodepth=64 -rw=write -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=/dev/sdb 

搭配 man fio 確認一下:

  • -runtime=1000 :跑一千秒。
  • -rw 或是 -readwrite : Type of I/O pattern. 上面試了其中四項,還有其它的可試:
    • read :Sequential reads.
    • write :Sequential writes.
    • randread :Random reads.
    • randwrite :Random writes.
  • --direct=1 :使用 non-buffered I/O ,和用 hdparm 時類似。

If value is true, use non-buffered I/O. This is usually O_DIRECT. Note that OpenBSD and ZFS on Solaris don't support direct I/O. On Windows the synchronous ioengines don't support direct I/O. Default: false.

  • –name= :這隻 job 的命名。(再深入應用時會區分 job)
  • –group_reporting :跑多個 job 時
  • –numjobs=:可同時跑多個 job

再來這些可以依情境調整 (模擬不同工作模式的負載)

  • -ioengine=libaio
  • -iodepth=:同一時間有多少 I/O 在做存取? 和 libaio引擎有關。
  • bs=4k:blocksize 。可用 fdisk -l 看測試的磁碟看一下原生大小。若分割時會去考量 blocksize 要切多大、日後常讀寫的檔案大小,可做調整。
  • -filename : 許多人的心得都認為要小心 (兩顆 SSD 內的資料沒事,可能是沒做 random write,以及還留著大半空間沒分割?)

要深究還很有得玩。
覺得整串太長,還可以寫成設定檔給 fio 跑

dd 搭配 time 的方式也常有人用,看起來是真的要在各個磁碟實際寫檔案,日後再練習了。

參考資料


六日一起出,也就給自已挑戰30篇文。


上一篇
Day-07-磁碟效能測試工具初探(一) - hdparm
下一篇
Day-09-Proxmox VE 命令列下操作初探
系列文
30 天homelab實做練習16
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言